package com.dufang.singletonMode;

/**
 * @ClassName:Singleton04
 * @Description 懒汉模式 + synchronized 同步锁
 *依然会创建多个实例。这是因为当多个线程进入到 if 判断条件里，虽然有同步锁，
 * 但是进入到判断条件里面的线程依然会依次获取到锁创建对象，然后再释放同步锁。所以我们还需要在同步锁里面再加一个判断条件
 * @Author Administrator
 * @Date 2025/7/7/007 13:01
 * @Version 1.0
 **/
public final class Singleton04 {
    private static Singleton04 instance=null;
    private Singleton04(){
        System.out.println(Thread.currentThread().getName()+"  懒汉+synchronized内部化");
    }

    public static Singleton04 getInstance(){//加同步锁，通过函数向整个程序提供实例对象
        if(null==instance){
            //当instance为null时，则实例化对象，否则直接返回对象
            synchronized (Singleton04.class){
               // if(null==instance) {
                    instance = new Singleton04();//实例化对象
               // }
            }
        }
        return instance;//返回已经存在的对象
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new Thread(()->{
                Singleton04.getInstance();
            }).start();
        }
    }
}
